// pages/user/user.js

// 全局对象
const app = getApp()
// 初始化数据库
const db = wx.cloud.database()

Page({

  data: {
    userPhoto:"../../images/tabbar/我的.png",
    // 判断手机登录状态
    logged: false,
    // 登录按钮是否禁用
    disable: true,
    id: '' 
  },

  // 生命周期函数--监听页面显示
  onShow: function(){
  this.setData({
    userPhoto: app.userInfo.userPhoto,
    nickName: app.userInfo.nickName,
    id: app.userInfo._id
  })
},

// 生命周期函数--监听也页面初次渲染完成
  onReady: function(){

    //获取用户位置经纬度
    this.getLocation()

    //自动登录，调用name为login的云函数，传递参数为{}
    wx.cloud.callFunction({ 
      name: 'login',//login云函数作用主要是获取当前用户openid
      data: {}
    }).then((res) => { //成功
      // console.log(res);
      // 引用数据库user表
      db.collection('users').where({
        _openid : res.result.openid //根据获取到的openid来获取对应的用户数据
      }).get().then((res)=>{
        if(res.data.length){
          app.userInfo = Object.assign(app.userInfo , res.data[0]);//给全局的用户信息赋值
          //赋值给当前组件需要用到的信息
          this.setData({
            userPhoto : app.userInfo.userPhoto,
            nickName : app.userInfo.nickName,
            logged : true , 
            id: app.userInfo._id        
          })
          // 获取用户消息队列
          this.getMessage()
        }else{ //登录失败
          this.setData({
            disable: false //显示登陆按钮
          })
        }
      })
    });

  },

  // 用户授权登录
  bindGetUserInfo(ev) {
    // console.log(ev);
   let userInfo  = ev.detail.userInfo; //获取到用户信息
  //  在没有登录的状态下并且具备userInfo
   if( !this.data.logged && userInfo ){
    //  应用user表，添加用户数据
     db.collection('users').add({
       data:{
        //  头像
         userPhoto: userInfo.avatarUrl,
        //  用户名
        nickName: userInfo.nickName,
        // 签名
        signature: '',
        // 电话号码
        phoneNumber: '',
        // 微信账号
        weixinNumber: '',
        // 点赞
        links: 0,
        // 时间
        time: new Date(),
        // 默认开启位置共享
        isLocation: true,
        // 经度
        longitude: this.longitude,
        // 纬度
        latitude: this.latitude,
        location: db.Geo.Point(this.longitude , this.latitude),
        // 好友列表集合数组
        friendList: [],
       }
     }).then( (res)=>{  // 新增数据成功
      //  console.log(res);
      db.collection('users').doc(res._id).get().then((res) => { //获取新添加完的数据
        // console.log(res.data);
        
        // 将信息写入到全局的app中
        app.userInfo = Object.assign( app.userInfo, res.data);
        this.setData({
          // 更新用户头像
          userPhoto: app.userInfo.userPhoto,
          // 更新用户名
          nickName: app.userInfo.nickName,
          // 切换登录状态
          logged: true,
          id: app.userInfo._id  
        })
      })
     })
   }
  },

  // 获取用户消息
  getMessage() {
    // 引用数据库message表
    db.collection('message').where({
      userId: app.userInfo._id //查询条件
    }).watch({
      // onChange表示每次监听数据库的变化
      onChange: function(snapshot){ //snapshot：变更快照
        if( snapshot.docChanges.length ){ //如果更新事件数组中有元素
          let list = snapshot.docChanges[0].doc.list
          if(list.length){ //如果有新消息
            wx.showTabBarRedDot({ //tabBar消息项显示红点
              index: 2, //从左往右起的第3项
            })
            app.userMessage = list //给全局用户消息赋值
          }
          else{
            wx.hideTabBarRedDot({ //隐藏红点
              index: 2,
            })
            app.userMessage = [] //用户详细赋值为空
          }
        }
      },
      onError: function (err) {
        console.log('the watch closed because of error',err)
      }
    })
  },

  // 获取经纬度
  getLocation(){   
    wx.getLocation({
      type: 'gcj02',
      success:(res) => {
        // 获取纬度
        this.latitude = res.latitude
        // 获取经度
        this.longitude = res.longitude
      }
    })
  },

})